import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Test {


    public static void main(String[] args) {
        //遍历arrayList
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        System.out.println(arrayList);//这种遍历是调用了toString方法

        //使用for循环
        for(int i=0;i<arrayList.size();i++) {
            System.out.print(arrayList.get(i)+" ");
        }
        System.out.println();

        //for-each循环
        for(Integer x: arrayList) {
            System.out.print(x+" ");
        }
            System.out.println();

        //使用迭代器
        Iterator<Integer> it= arrayList.iterator();
        while(it.hasNext()) {
            System.out.print(it.next()+" ");
        }
        System.out.println();

        //只要实现了Iterator了接口，都能使用，ListIterator继承自Iterable
        ListIterator<Integer> it2= arrayList.listIterator();
        while(it2.hasNext()) {
            System.out.print(it2.next()+" ");
        }
        System.out.println();

        //ListIterable可以倒着打印
        ListIterator<Integer> it3= arrayList.listIterator();
        while(it2.hasPrevious()) {
            System.out.print(it2.previous()+" ");
        }
        System.out.println();

        ListIterator<Integer> it4= arrayList.listIterator(arrayList.size());//传入的参数表示从指定位置开始打印
        while(it2.hasPrevious()) {
            System.out.print(it2.previous()+" ");
        }
        System.out.println();

    }
    public static void main3(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(23);
        arrayList.add(34);

        System.out.println(arrayList);

        List<Integer> list=arrayList.subList(1,3);//subList的返回值是一个List接口,拿List<Integer>类型进行接收,左闭右开
        System.out.println(list);

        list.set(0,99);//更新，将list下标为0的元素改为99
        System.out.println(list);
        System.out.println(arrayList);
    }
    public static void main2(String[] args) {
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(10);
        arrayList.add(2);
        System.out.println(arrayList);

        arrayList.remove(1);//删除1下标
//        System.out.println(arrayList);

//        arrayList.remove(new Integer(10));
        arrayList.remove(Integer.valueOf(10));//remove接受的是对象，所以这里是进行了装箱
        System.out.println(arrayList);


    }

    public static void main1(String[] args) {
        /*
        下面这两种都可以，但是有区别
        List是接口 ，ArrayList是个类
        通过接口还是类能访问到的方法是不一样的
        通过LIst访问到的是接口的方法，ArrayLIst则能访问到当前类的方法，访问范围更大

         */
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        System.out.println(arrayList);
//        ArrayList<Integer> arrayList2=new ArrayList<>(5);
        ArrayList<Integer> arrayList3=new ArrayList<>(arrayList);

        arrayList3.addAll(arrayList);//addAll可以将一组数据一起添加
        System.out.println(arrayList3);


        List<Integer> list =new ArrayList<>();
    }
}
